(for Internet Explorer)
関連
Function  CutFragmentInURL( in_URL as string )
ファイル パスや URL に(# から始まる)フラグメントがあれば削除します。
Assert  CutFragmentInURL( "C:\File.txt#2" ) = "C:\File.txt"
【引数】
in_URL
返り値
(入出力)パスやファイル名を含む文字列
(出力) 削除する内容の文字列
サンプル
ソース
→ vbslib.vbs
Function  GetTagJumpParams( PathAndFragment as string ) as TagJumpParams
タグジャンプ形式の文字列(パス+行番号)を分解します。
サンプル:
Set jumps = GetTagJumpParams( "C:\folder\file1.txt(100)" )
'// jumps.Path = "C:\folder\file1.txt"
'// jumps.LineNum = 100
'// IsEmpty( jumps.Keyword )
関連
テスト
→ T_Path.vbs
→ T_EditorDiff_Manually.vbs
Class  TagJumpParams
  Public  Path     '// パス or ""、フル・パスとは限りません
  Public  LineNum  '// as integer or Empty
  Public  Keyword  '// as string or Empty
End Class
Set jumps = GetTagJumpParams( "file1.txt#Key" )
'// jumps.Path = "file1.txt"
'// jumps.Keyword = "Key"
'// IsEmpty( jumps.LineNum )
参考
タグジャンプ形式の文字列の詳細
GetTagJumpParams( "C:\folder\file1.txt(100)" ).Path
Set jumps = GetTagJumpParams( "file1.txt" )
'// jumps.Path = "file1.txt"
'// IsEmpty( jumps.LineNum )
'// IsEmpty( jumps.Keyword )
→ vbslib.vbs
ソース
Set jumps = GetTagJumpParams( "file${>#}1.txt" )
'// jumps.Path = "file#1.txt"
'// IsEmpty( jumps.LineNum )
'// IsEmpty( jumps.Keyword )
T_GetTagJumpParams
T_EditorManually
${>#} 以外の ${ } は
そのまま
Set jumps = GetTagJumpParams( "file1.txt#${\n}" )
'// jumps.Path = "file1.txt"
'// IsEmpty( jumps.LineNum )
'// jumps.Keyword = "${\n}"
${>#} は、# 文字になり、
# で Keyword の区切り
にはならない
Function  GetTagJumpPath( PathAndLine as string ) as string
タグジャンプ形式の文字列(パス+行番号)から、パスを取り出す。
サンプル:
path = GetTagJumpPath( "C:\folder\file1.txt(100)" )
path には、"C:\folder\file1.txt" が入ります。
(src)
関連
テスト
→ T_Path.vbs # GetTagJumpPath
廃止予定です。 GetTagJumpParams を使ってください。
Function  GetTagJumpLine( PathAndLine as string ) as integer
タグジャンプ形式の文字列(パス+行番号)から、行番号を取り出す。
サンプル:
line = GetTagJumpPath( "C:\folder\file1.txt(100)" )
line には、100 が入ります。
(src)
関連
テスト
→ T_Path.vbs # GetTagJumpLine
PathAndLine に行番号が無いときは、0 が返ります。
廃止予定です。 GetTagJumpParams を使ってください。
Function  IsMovablePathToPath( SrcPath as string, DstPath as string, IsDstFolder as boolean )
    as boolean
(src)
ファイルやフォルダーのパス SrcPath と DstPath の間で、移動ができるかどうかを返します。
【引数】
SrcPath
DstPath
移動元のファイルやフォルダーのパス
移動先のファイルやフォルダーのパス
IsDstFolder
DstPath がフォルダーかどうか
移動ができるかどうか
返り値
テスト
→ T_Path.vbs # [T_IsMovablePathToPath]
ドライブが異なっていたり、ネットワーク ドライブとローカル ドライブの違いがあると、移動できません。
ファイルのパスか、ファイルの内容に相当する文字列の抽象。
一部の vbslib の関数の引数にファイル名の代わりに指定することができるファイル・パス・オブジェクトです。
文字列や、スクリプトの中のコメントなどを、ファイルとして扱います。
次の関数のファイル名の代わりに指定することができます。
サンプル
Set root = LoadXML( new_FilePathForString( "<Root></Root>" ), Empty )
次の関数で FilePathClass のオブジェクトを生成することができます。
テスト
→ T_XML.vbs
T_LoadXML_PathObject
ソース
→ vbslib.vbs
文字列をファイルとして扱います
スクリプトの中のコメントをファイルとして扱います
入力ファイル・パスに相当する文字列を返します
次のプロパティがあります。
FilePathClass のオブジェクトを ReadFile 関数に渡し、その返り値を使ってファイルの内容を処理するコード
は共通にできるでしょう。
.Text
.FilePath
テキスト・ファイルの内容
ファイル・パス
関連
Set root = LoadXML( "sample.xml" ), Empty )
Set root = LoadXML( new_FilePathForFileInScript( Empty ), Empty )
ファイルの内容、または、それに相当する文字列を返します
Set root = LoadXML( new_FilePathForString( "<Root></Root>" ), Empty )
Function  new_FilePathForString( Text as string ) as FilePathClass
文字列をファイルとして扱うように、ファイル名の代わりに指定するオブジェクトを返します。
【引数】
Text
ファイルの内容
ファイル名の代わりに指定するオブジェクト
返り値
テスト
サンプル
ソース
→ T_XML.vbs
T_LoadXML_PathObject
→ vbslib.vbs
Function  new_FilePathForFileInScript( Parameter as Empty ) as FilePathClass
スクリプトの中のコメントをファイルとして扱うように、ファイル名の代わりに指定するオブジェクトを返します。
【引数】
Parameter
VBScript ファイルのパス、# 可能、Empty =
ファイル名の代わりに指定するオブジェクト
返り値
'------------------------------------------------------------[FileInScript.xml]
'<Root>
'<Tag out_path="_Out.txt"/>
'</Root>
'-----------------------------------------------------------[/FileInScript.xml]

Sub  Main( Opt, AppKey )
    CommandA_App  AppKey, new_FilePathForFileInScript( Empty )
End Sub


'--- start of vbslib include ------------------------------
  :   (vbslib をインクルードして main を呼び出すコード)
サンプル
関連
メイン・スクリプト・ファイル(WScript.ScriptFullName) に書かれた [FileInScript.*] がある行の次の行から、
[/FileInScript.*] がある行の前の行までを、ファイルの内容として扱います。 * は任意の文字列です。
スクリプト・ファイルの中にある XML データを CommandA に渡します。
テスト
→ T_FileInScript.vbs
T_new_FilePathForFileInScript
Sub  CommandA_App( AppKey, Path )
    Set root = LoadXML( Path, Empty )

    out_path = root.selectSingleNode( "./Tag" ).getAttribute( "out_path" )
    Set w_=AppKey.NewWritable( out_path ).Enable()
End Sub
上記スクリプトから呼び出す CommandA_App 関数の例:
ソース
→ vbslib.vbs
ファイルの内容(XML データ)の部分の行頭には、' が必要です。
参考
Path に、URL のように # を付けると、スクリプト・ファイルの中の行末にあるタグを検索して、
その中のデータをファイルとして扱います。
path_object = new_FilePathForFileInScript( "#FileInScript.xml" )
Function  GetFilePathString( Path as string or FilePathClass ) as string
入力ファイル・パスに相当する文字列を返します。
【引数】
Path
ファイル・パス・オブジェクト、または、入力ファイル・パス
入力ファイル・パスに相当する文字列
返り値
返り値は、データが存在するファイル・パスを表示するため、データ・ファイルがあるフォルダーの
パスを取得するために使うことができます。
返り値を、
など、ファイルの内容にアクセスする関数に渡すと、期待と異なるデータを入力
Path 引数が
の返り値を、GetFilePath の
してしまうことがあります。 たとえば、
引数に指定したときは、スクリプトの中のコメントではなく、スクリプト・ファイル全体を入力します。
ソース
→ vbslib.vbs
Path 引数が 文字列なら、その文字列を返します。
なら、WScript.ScriptFullName を返します。
その他
ワイルドカードを使って、ファイルパスを変更します。
旧仕様
Function  ArrayFromWildcard( WildcardPath as string ) as PathDictionaryClass of Nothing
ワイルドカードを展開します。 サブ フォルダーも検索します。
【引数】
ワイルドカードを含むパス。フォルダー指定も可。配列可
WildcardPath
    For Each  step_path  In  ArrayFromWildcard( "data\*" ).FilePaths
        echo  step_path
    Next
可能:
"*", "*.txt", "file*", "folder\*.txt", Array( "Fo\*.txt", "Fo\*.log" ),
"folder", "Debug\",  "Fo\*.txt | Fo\*.log",  "Fo\*.txt, Fo\*.log",
"NoWildcard.txt", "folder\*", "fo\*\file.txt", "*\file.txt", ".\file.txt"
関連
→ ファイル一覧
テスト
高速なフォルダ一覧
ファイル名やフォルダー名でソートされます。
サンプル
性能
不可能:
"folder*\file.txt"
ファイル・パスの配列を使ってコピーする
ソース
→ vbslib.vbs
返り値
of Nothing
→ T_Wildcard.vbs
T_ArrayFromWildcard1
が使えます。 例: "folder\*\back_up.txt", "folder\.\*.txt"
PathDictionaryClass のオブジェクトを指定したら、そのオブジェクトを返します。
ワイルドカードが、ファイル名やフォルダー名に相当する部分(もっとも右の \ の右側)に
あれば、サブ・フォルダーも検索します。
が優先されます。
ただし、WildcardPath 引数に指定した
サブ フォルダー記号が指定されていない( .\ も *\ もない)ときは、
指定したパスのファイルやフォルダーがないときはエラーにします(サブ フォルダー
記号 * や、ワイルドカードが無いときのみ)。
ファイルに対する処理の場合(ArrayFromWildcard の返り値の FilePaths プロパティ
などが参照される場合)、フォルダーのパスを指定すると、サブ・フォルダーにある
ファイルも検索します。
BasePath プロパティが指定フォルダーになる ArrayFromWildcard
と違い、BasePath プロパティは、カレント フォルダーになります。
path = GetFirst( ArrayFromWildcard( "Sub\File*.txt" ).FilePaths )
サンプル
ワイルドカードを1つだけ展開します。
参考
テスト
→ T_Wildcard.vbs # T_Wildcard_Speed
最も速いのは、
を使う方法です。
最も扱いやすいのは、
を使う方法です。
中間的なのは、
を使う方法です。
Sub  ExpandWildcard( WildcardPath as string, Flags as integer,
                     out_Folder as string, out_StepPaths as array of string )
ワイルドカードを展開します。 サブ・フォルダーも検索します。
【引数】
out_Folder
out_StepPaths
(出力) wildcard が含まれるフォルダのフル・パス
(出力) ワイルドカードにマッチした相対パスの配列
ワイルドカードを含むパス。フォルダ指定も可。配列可
WildcardPath
    Set c = g_VBS_Lib

    ExpandWildcard  "data\*",  c.File or c.SubFolder,  folder,  step_paths
    For Each  step_path  In  step_paths
        If InStr( step_path, "\_setup_" ) = 0 Then  '// 除外する場合
            echo  GetFullPath( step_path, folder )  '// g_fs.BuildPath は使わないこと
        End If
    Next
フラグの論理和
Flags
c.SubFolder
wildcard
f.txt
f.bin
f.txt
sub\f.txt
False
×
×
f.txt
True
×
*.txt
sub\abc.txt
×
×
True
×
sub\*
sub
True
True
×
×
×
×
×
×
関連
→ ファイル一覧
テスト
高速なフォルダ一覧
g_Vers("ExpandWildcard_Sort") = True
下記のように設定してから、ExpandWildcard を呼び出すと、ファイル名やフォルダー名で
ソートされます。 少し遅くなりますが、列挙されるファイルの順番がどのような環境でも
→ T_Wildcard.vbs # Main
下記の定数の or。 下記の c は、g_VBS_Lib の返り値。
ファイルを検索する
フォルダーを検索する
サブ・フォルダーも検索する。
out_Folder を out_StepPaths に含め、out_Folder = Empty にする
out_StepPaths の配列要素数を、WildcardPath に指定した配列
の要素数と同じにして、配列要素は、それぞれのワイルドカード
にマッチしたパスの配列にする
サンプル
性能
ファイル・パスの配列を使ってコピーする
指定したパスに見つからないときにもエラーにしない
ソース
→ vbslib.vbs
ソース
→ vbslib.vbs
ただし、WildcardPath 引数に指定した
が優先されます。
サブ・フォルダーも検索するかどうかは、ワールドカードが
指定されたかどうかなどによって決めます。
詳細は、
空のフォルダーを検索する。
out_StepPaths 引数に出力されるパスの末尾には \ が付きます。
sort_setting_back_up = g_Vers("ExpandWildcard_Sort")
g_Vers("ExpandWildcard_Sort") = True
    :
g_Vers("ExpandWildcard_Sort") = sort_setting_back_up
ワイルドカードにマッチするかどうか
で比較したソートを行います。 このとき、フォルダーの区切り記号は含まれません。
同じになります。 内部でそれぞれのフォルダーを展開するごとに
ExpandWildcard の内部データ構造
ExpandWildcardWorkClass
.items
.is_root_folder
.folder_path
.first_out_count
.out_fast_ubound
.sort_box
ArrayClass <ExpandWildcardItemClass>
boolean
string
integer
integer
ArrayClass <string>
.re
.re2
.IsSubFolder
re_type  (*1)
boolean
Empty
re2_type (*1)
(*1) re_type と re2_type は、以下の組み合わせのいずれかです。
re_type
re2_type
RegExp
RegExp
Empty
Empty
Empty
StrMatchKey
NameOnlyClass
WildcardPath 引数
"*"
ワイルドカードがない
"*" が1個のとき
* が2つのときか、? があるとき
work
reg_exp_dic
dictionary < (folder_path), ArrayClass <ExpandWildcardItemClass> >
out_StepPaths
array < File or Folder or (abs_path) >
// ExpandWildcard_sub 開始時の UBound( out_StepPaths )
// 実質的な UBound( out_StepPaths )
テスト
ソース
→ T_Wildcard.vbs
→ ToolsLib.vbs
Function  Expand_glob_Pattern( in_Pattern as string ) as array of string
を展開します。
【引数】
in_Pattern
globパターンの文字列
返り値
globパターンを展開したパスの配列
globパターン
T_glob_1
"*.txt"
"[1-3].txt"
"s/*.txt"
サンプル
in_Pattern 引数
ワイルドカードは、カレント フォルダーにあるファイルやフォルダーの名前に展開されます。
サブフォルダーは展開されません。
展開結果の例
"1.txt", "2.txt", "3.txt", "example.txt"
"s\example.txt"
"[12].txt"
"1.txt", "2.txt"
"[012].txt"
"1.txt", "2.txt" (0.txt がない場合)
"[!1].txt"
"1.txt", "2.txt", "3.txt"
"2.txt", "3.txt" (1.txt 以外の ?.txt)
"?.txt"
"1.txt", "2.txt", "3.txt"
"[!12].txt"
"3.txt" (1.txt, 2.txt 以外の ?.txt)
"s/v/*.txt"
"s/v\example.txt" (ワイルドカードの直前だけ\)
関連
PathDictionaryClass は、辞書のアイテムを設定するときのキーにフォルダーのパスを指定したら、
キーにフォルダーの中のファイルのパスも指定しても、同じアイテムを取得できる辞書です。
.FilePaths
.Item Set
.Item Get
.Item Set に指定したフォルダーの中にあるファイルやフォルダーも指定可能。
ただし、.Item Set に指定したキーが相対パスなら、絶対パスとはマッチしません。
.AddRemove で除外したパスが指定されたときは、.RemovedObject が返ります。
辞書のキーに登録したファイルと、辞書のキーに登録したフォルダーに含まれる
ファイルの相対パスを列挙します。
キーが相対パスなら、相対パスの配列が返ります。
キーの末尾が \ のときは、フォルダーにマッチします。
.IsNotFoundError = False にすると、キーが指すパスにファイルまたはフォルダーが
ないときでもエラーになりません。
ファイル、または、フォルダーのパスをキーに指定します。
サブ フォルダーも含むワイルド カードも指定可能です。
テスト
ソース
→ T_Wildcard.vbs
T_PathDictionary_1, T_PathDictionary_Wildcard, T_PathDictionary_OverSub
→ vbslib.vbs
    Set  paths = new PathDictionaryClass
    Set  paths( "Folder\Sub" ) = a_object
    paths.AddRemove  "*.bak"

    Assert  IsSameArray( paths.FilePaths, Array( "Files\1\A.txt", "Files\1\B.txt" ) )

    For Each  key  In  paths.FilePaths
        Assert  paths( key ) Is a_object
    Next
サンプル
サブ フォルダーのキーも設定されているときに、サブ フォルダーの中のファイルやフォルダーのパス
を指定したときは、サブ フォルダーに設定されたアイテムが優先して取得されます。
対象外にするフォルダーのパスや、拡張子を設定します
    Set paths = new PathDictionaryClass
    Set paths( "Folder" ) = a_object
    Set paths( "Folder\Sub" ) = b_object
    Assert  paths( "Folder\File.txt" ) is  a_object
    Assert  paths( "Folder\Sub\File.txt" ) is  b_object
メンバー
関連
.FileExists( Path )
キーに指定したファイルパスが辞書にあるなら True。
キーに指定したフォルダーの中(のサブフォルダー)にあるファイルの
パスが指定されたときも、True。
引数に絶対パスを指定可能。
.BasePath
キーに相対パスを指定した時の基準パス。 初期値は生成時のカレントフォルダー。
変更したら、FilePaths などの数が変わることがあります。
.Add( Key, Item ), .Count, .Items, .CompareMode, .Remove(), .RemoveAll()
Scripting.Dictionary と同じ
.FullPaths
フル パスの配列が返る FilePaths。
フォルダーを一覧する
ファイルを一覧する
XML からファイルの集合を指定する
    Set paths = new PathDictionaryClass
    paths.BasePath = "C:\BaseFolder"
    Set paths( "Folder" ) = a_object
    Assert  paths( "Folder\File.txt" ) is  a_object
PathDictionaryClass を取得する別の方法
ファイルのパスか、ファイルの内容に相当する文字列の抽象
を使えば、XML ファイルの中からパスの指定を取得できます。
<Root>
    <Variable name="${ExceptExts}" value="*.obj, *.bak"/>

    <File path="Sample.txt"/>
    <Folder path="SubFolder" attr="ABC">
        <Except path="${ExceptExts}"/>
        <Except path="SubFolder\Debug"/>
    </Folder>
</Root>
Variable name
value
Except
Except
Folder path
path
path
File path
でも、PathDictionaryClass のオブジェクトが得られます。 ArrayFromWildcard
    Set paths = ArrayFromWildcard( "Folder" )
    Assert  paths( "Folder\File.txt" ) Is Nothing
標準の辞書との互換性
.Count, .Keys, .Items などのメソッドやプロパティは、Scripting.Dictionary と互換性があります。
などの、辞書を使った関数を使うこともできます。
Except タグは、AddRemove メソッドに相当します。
.FolderExists( Path )
FileExists に列挙されるファイルを含むフォルダーがあるかどうか。
Path がファイルにマッチするときは、False。
.FolderPaths
ファイルがあるフォルダーの相対パスを列挙します。
親フォルダーの親フォルダーも列挙します。
.DeleteFolderPaths
ファイルを削除したときに削除の候補となるフォルダーの相対パスを
列挙します。 削除の候補となるフォルダーは、AddRemove に指定した
パスを含まない親フォルダーです。 フォルダーを削除するときは、候補
となるフォルダーのサブフォルダーも削除してください。
.DeleteFolderExists( Path )
削除の候補となるフォルダーかどうか。
削除の候補となるサブフォルダーにマッチするときは、True
.Keys
辞書に登録したキー(パス)を列挙します。
.AddRemove で除外したパスも列挙します。
指定したパスの親フォルダーのパスを検索します。
関連
で、特定のオブジェクトをアイテムに持つパスを列挙できます。
.IsScaned
.FilePaths, .FullPaths, .FolderPaths に必要なデータを集めるために、フォルダー
を探索したかどうか。 辞書を変更すると False になり、再度探索します。
.IsNotFoundError
.FilePaths で .Key に設定したパスが見つからないエラーを発生するかどうか
    Set paths0 = new PathDictionaryClass
    Set paths( "Folder" ) = a_object

    Set paths = ArrayFromWildcard( paths0 )
    Assert  paths is paths0
    Assert  paths( "Folder\File.txt" ) Is a_object
には、パスの文字列だけでなく PathDictionaryClass のオブジェクトでも、どちらでも指定できます。
FilePaths プロパティは、フォルダーの中にある複数のファイルのパスの配列です。
FilePaths プロパティなどに含まれるか含まれないかが期待と異なるときは、PathDictionaryClass の
オブジェクトを生成した直後に、IsDebugLog プロパティを True にして実行して、キーとファイル
パスの関連を一覧表示してください。
    Set paths = new PathDictionaryClass
    paths.BasePath = "C:\Folder"
    Set paths( "Folder" ) = a_object
    paths.AddRemove  "*.bak"
    Assert  IsSameArray( paths.FilePaths, Array( "Files\1\A.txt", "Files\1\B.txt" ) )
FilePaths プロパティは、
でソートされた配列を取得します。
.RemovedObject
.AddRemove で除外したパスをキーに指定したときの Item
.KeysEx( Opt )
辞書に登録したキー(パス)を列挙します。 ただし、Opt = Me.ExceptRemoved を
指定したときは、.AddRemove で除外したパスを列挙しないようになります。
参考
FilePaths
"Folder"
"Folder\File.txt"
存在するフォルダーやファイルのパスをキーに指定してください。
なります。
ただし、
が呼び出してあったら、そのファイルやフォルダーは FilePaths の対象外に
ファイルを一覧するプロパティにアクセスすると、フォルダーの中を探索するため時間がかかります。
PathDictionaryClass のオブジェクトの内容を変更しなければ、キャッシュを使って高速に探索します。
に対しても、どちらでも指定できます。
.FullPaths に空のフォルダーも追加したフル パスの配列。
空のフォルダーを指すパスの末尾には \ が付きます。
関連
.Exists( Path )
辞書に登録したキー(パス)であるかどうかを返します。
.AddRemove で除外したパスも列挙します。
が使えます。 例: "folder\*\back_up.txt", "folder\.\*.txt"
キーには、
アイテムには、任意のオブジェクトを指定できます (ただし、オブジェクト型のみ)。
ファイルのパス、フォルダーのパス、ワイルドカードの間の優先順位を下記に示します。
上にあるほど優先度が高いです。 たとえば、あるファイルが、キーに指定したワイルドカードにマッチ
しつつ、別のキーに指定したフォルダーの中にあるとき、キーにそのファイルのパスを指定すると、
優先順位の高いワイルドカードをキーに指定して代入したアイテムが返ります。
・ファイルのパス(長い)
・ファイルのパス(短い)
・ワイルドカードがあるパス(\ 記号を含み、長い)
・ワイルドカードがあるパス(\ 記号を含み、短い)
・ワイルドカードがあるパス(\ 記号を含まず、長い)
・ワイルドカードがあるパス(\ 記号を含まず、短い)
・フォルダーのパス(長い)
・フォルダーのパス(短い)
    *\Debug\ => Debug\a.obj
    *\Debug\ => Debug\b.obj
    . => a.c
    . => b.c
    Set paths = new PathDictionaryClass
paths.IsDebugLog = True
    paths.FilePaths
一覧表示
スクリプト
.IsDebugLog
キーとファイル パスの関連を一覧表示するかどうか
IsDebugLog
ファイル名のワイルドカードがあるパスより、フォルダーのパスを優先したいときは、Folder\*
のように指定してください。